<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 1.给定两个数组，编写一个函数来计算它们的交集。
    nums1 = [1, 2, 2, 1,3,4,4,5], nums2 = [2, 2,3,3,4]
    function jiaoji(arr1, arr2) {
        // 先找出两个数组的交集
        var res1 = arr1.filter(function(val,idx,self){
            // val是可以取到arr1的所有数据，然后把这所有的数据一个一个的与arr2中的数据比较（通过indexOf(),indexOf(val)在arr1存在就输出索引值，
            // 不存在就输出-1），通过判断条件是否成立，然后返回条件成立的值所组成的数组
            return arr2.indexOf(val) !== -1;
        })
        // console.log(res1)
        // 给得到的交集去重
        var res2 = res1.reduce(function(pre,val,idx,self){
            return pre.indexOf(val) === -1? pre.concat(val):pre
        },[])
        console.log(res2)
    }
    jiaoji(nums1, nums2)


    // 2.找到所有数组中消失的数字
    // 找到所有在 [1, n] 范围之间没有出现在数组中的数字。
    var arr2 = [4,3,2,7,8,2,3,1,10,13];
    arr2.sort(function(m,n){
        return m-n
    })
    var newArr2 = []
    for(var i = arr2[0];i<arr2[arr2.length-1];i++){
        newArr2.push(i)
    }
    var res2 = newArr2.filter(function(val,idx,self){
        return arr2.indexOf(val) === -1
    })
    console.log(res2)
 
 
    // 3.使用reduce实现数组去重
    var array3 = [1,3,5,5,7,2,3,1,8,7]
        var res3 = array3.reduce(function (pre, cur, idx, self) {
            return pre.includes(cur)? pre : pre.concat(cur);
        }, [])
    console.log(res3)
 
 
    // 4.统计数组中元素出现的次数
    nums1 = [1, 2, 2, 1,3,4,4,5]
    var res4 = nums1.reduce(function(pre,val){
        if(val in pre){
            pre[val] += 1;
        }else{
            pre[val] = 1;
        }
        return pre
    },{})
    console.log(res4)
    for(var i in res4){
        console.log(i + "出现的次数为："+ res4[i]);
    }
</script>

</html>